import loginApi from '@/api/loginApi'
import { aesDecrypt, aesEncrypt } from '@/utils/encryption'

export const Request = () => {
  uni.$u.http.setConfig((config: any) => {
    /* config 为默认全局配置*/
    /* 根域名 h5使用/api   小程序使用VITE_ADMIN_PROXY_PATH */
    config.baseURL = import.meta.env.VITE_ADMIN_PROXY_PATH
    config.header = {
      'x-ajax': 'json',
      'CLIENT-TOC': 'Y',
      'x-requested-with': 'XMLHttpRequest',
      // 'Enc-Flag': import.meta.env.VITE_IS_encryption
    }
    return config
  })

  // 请求拦截
  uni.$u.http.interceptors.request.use(
    (config: any) => {
      // 获取缓存
      let token: string = uni.getStorageSync('access_token')
      // let tenantId: string = uni.getStorageSync('TENANT-ID');
      if (token) {
        config.header['Authorization'] = `Bearer ${token}`
      }
      // if (tenantId) {
      //     config.header['TENANT-ID'] = tenantId;
      // }
      // 请求报文加密
      if (config.header['Enc-Flag'] == 'true') {
        config.data = {
          encryption: aesEncrypt(JSON.stringify(config.data)),
        }
      }
      config.data = config.data || {}
      return config
    },
    (config: any) => {
      // 可使用async await 做异步操作
      return Promise.reject(config)
    }
  )

  // 响应拦截
  uni.$u.http.interceptors.response.use(
    (response: any) => {
      /* 对响应成功做点什么 可使用async await 做异步操作*/
      const res = response.data
      if (!res.success) {
        // 错误提示
        uni.showToast({
          title: res.errorMsg,
          icon: 'none',
        })
      }
      // 针对密文返回解密
      if (res.data && res.data.encryption) {
        const originData = JSON.parse(aesDecrypt(res.data.encryption, import.meta.env.VITE_encPassword))
        return originData
      }
      return res
    },
    (error: any) => {
      // 错误提示
      uni.showToast({
        title: error.data.errorMsg,
        icon: 'none',
      })
      if (error.statusCode == 403 || error.statusCode == 424) {
        setTimeout(() => {
          // 清除缓存  退出登录
          loginApi.logout()
        }, 1500)
      }
      return error
    }
  )
}
